package com.wzz.common.menu.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.Toast;

import com.hymobile.common.R;

/**
 * 牛帅 2011 12 13
 * @author Administrator
 * 
 *         自定义Menu，而不用系统自带的Menu
 * 
 *         系统Menu原理：当我们单击Menu按钮的时候，系统弹出一个PopupWindow 这个PopupWindow上面放置的就是菜单
 * 
 *         为了让我们单击Menu按钮的时候，弹出我们自己的定义的Menu，
 *         只要捕获keyDown事件即可，再keyDown事件里，找到我们自己的Menu窗口，并将其显示出来
 * 
 *         而定义一个Menu窗口就是要用到PopupWindow了
 * 
 *         然后再PopupWindow里放入我们自定义的布局文件，就一切如我们所愿了
 * 
 *         我们自己可以布局了，哈哈，是不是就可以加背景，换颜色，为所欲为了？？？
 * 
 */
public class MyselfMenu extends Activity {

  private PopupWindow menuWindow;

  private LinearLayout menuStart, menuPause, menuStop;

  private LayoutInflater inflater; // 这个是将xml中的布局显示在屏幕上的关键类

  private View layout;

  private boolean menu_display = false;

  // 在onKeyDown中截获系统Menu单击事件
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    // 就是如此简单，呵呵
    if (keyCode == KeyEvent.KEYCODE_MENU) {

      if (!menu_display) {
        // 获取LayoutInflater实例
        inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
        // 这里的main布局是在inflate中加入的哦，以前都是直接this.setContentView()的吧？呵呵
        // 该方法返回的是一个View的对象，是布局中的根
        layout = inflater.inflate(R.layout.menu, null);

        // 下面我们要考虑了，我怎样将我的layout加入到PopupWindow中呢？？？很简单
        menuWindow = new PopupWindow(layout, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); // 后两个参数是width和height
        // menuWindow.showAsDropDown(layout); //设置弹出效果
        menuWindow.showAtLocation(this.findViewById(R.id.main), Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); // 设置layout在PopupWindow中显示的位置
        // 如何获取我们main中的控件呢？也很简单
        menuStart = (LinearLayout) layout.findViewById(R.id.layout_start);
        menuPause = (LinearLayout) layout.findViewById(R.id.layout_pause);
        menuStop = (LinearLayout) layout.findViewById(R.id.layout_stop);

        // 下面对每一个Layout进行单击事件的注册吧。。。
        // 比如单击某个MenuItem的时候，他的背景色改变
        // 事先准备好一些背景图片或者颜色
        menuStart.setOnClickListener(startListener);
        menuPause.setOnClickListener(pauseListener);
        menuStop.setOnClickListener(stopListener);

        menu_display = true;
      } else {
        // 如果当前已经为显示状态，则隐藏起来
        menuWindow.dismiss();
        menu_display = false;
      }

      return false;
    } else if (keyCode == KeyEvent.KEYCODE_BACK) {
      // 如果用户按得是返回键，则不显示菜单
      if (menu_display) {
        // 当前菜单显示状态，则隐藏
        menuWindow.dismiss();
      } else {
        // 结束当前
        System.exit(0);
      }
      return false;
    } else {
      return false;
    }

  }

  private View.OnClickListener startListener = new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {

      Toast.makeText(MyselfMenu.this, "start", Toast.LENGTH_SHORT).show();

    }
  };

  private View.OnClickListener pauseListener = new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {

      Toast.makeText(MyselfMenu.this, "pause", Toast.LENGTH_SHORT).show();
    }
  };

  private View.OnClickListener stopListener = new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {

      Toast.makeText(MyselfMenu.this, "stop", Toast.LENGTH_SHORT).show();
    }
  };

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); // 去掉标题
    // 注意:requestWindowFeature必须在setContentView之前
    setContentView(R.layout.menumain);
    // 全屏设置
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  }
}